package Thread;

import java.util.Scanner;

public class Demo18 {
    private  static volatile int flag = 0;

    /**
     * 这是编程优化出现的线程安全问题
     * t1线程读取，t2线程修改，修改线程修改的值没有被t1线程读到。
     * 内存可见性问题
     * 要想解决就需要一个关键字volatile或着引入Thread.sleep()，但是不是每次都能靠这个解决的，所以还是需要volatile
     * @param args
     */
    public static void main(String[] args) {
        Thread t1 = new Thread(()->{
            while (flag==0){
                //System.out.println("小笨蛋");
//                try {
//                    Thread.sleep(1000);
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
            }
            System.out.println("t1 线程结束");
        });
        Thread t2 = new Thread(()->{
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入flag的值：");
            flag = scanner.nextInt();
        });
        t1.start();
        t2.start();
    }
}
